//
//  WTUserAccountTools.swift
//  WTSinaWeibo
//
//  Created by  Wellim on 16/6/27.
//  Copyright © 2016年  Wellim. All rights reserved.
//

import UIKit

class WTUserAccountTools: NSObject {
    
    // 路径
    let path = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("userAccount.archiver")
  
    // 保存的用户信息数据对象
    var userAccount:WTUserAccount?
    
    //判断用户是否登录
    
    var isLogin:Bool{
    // 如果access_token 为nil 代表没有登录
        return  accessToken !=  nil
    
    }
    
    // 访问令牌（只读属性）
    var accessToken: String?{
     // 代表没有登录
        
        if userAccount?.access_token == nil {
            
            return nil
        }else{
        
            // 如果expires_Date 于当前时间比较是降序 代表没有过去
            if userAccount?.expires_Date?.compare(NSDate()) == NSComparisonResult.OrderedDescending {
                
                return userAccount?.access_token
            }else{
                
                return nil
            }
        
        
        }
    
    
    
    
    }
    
    
    /*
     - isLogin
     - accessToken
     - 如果判断用户是否登录
     - 未登录
     - 如果我的access_token 为nil
     - 如果我的access_token 有值 但是 过期了
     - 已登录
     - 我的access_token有值 而且没有过期
     */
    // 全局访问点
    
    static let sharedUserAccountTools:WTUserAccountTools = WTUserAccountTools()
    
    override init() {
        super.init()
        
       userAccount = getUserAccount()
        
    }
    
     // 保存对象
    
    func saveUserAccount(userAccount:WTUserAccount)  {
        // 如果第一次调用我们的单例 userAccount 是nil
        // 然后我马上使用我们的userAccount 需要我们在保存数据的时候 要自己给单例对象身上的属性useraccount 赋值
        self.userAccount = userAccount
        
        NSKeyedArchiver.archiveRootObject(userAccount, toFile: path)
        
    }
   // 获取对象
    func getUserAccount() -> WTUserAccount? {
        // 由于我们第一次获取对象的时候我们根本就没有保存 所以系统返回给我们为nil

        let reuslt = NSKeyedUnarchiver.unarchiveObjectWithFile(path) as?WTUserAccount
        
        return reuslt
        
    }
    
    

}
